﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SharpSphinx.Frontend;

namespace SharpSphinx.Decoder.Scorer
{

    /// <summary>
    /// Represents an entity that can be scored against a data 
    /// </summary>
    public interface IScoreable :  IData 
    {
     //   Comparer<IScoreable> Comparator =



        /// <summary>
        /// Calculates a score against the given data. The score can be retrieved with get score
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        float CalculateScore(IData data);



        /// <summary>
        /// Retrieves a previously calculated (and possibly normalized) score
        /// </summary>
        /// <returns></returns>
        float GetScore();

        /// <summary>
        /// Normalizes a previously calculated score
        /// </summary>
        /// <param name="MaxScore"></param>
        /// <returns></returns>
        float NormalizeScore(float MaxScore);


        /// <summary>
        /// Returns the frame number that this Scoreable should be scored against.
        /// </summary>
        /// <returns></returns>
        int getFrameNumber(); 





    }
}
